home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
524
/
524.xpi
/
chrome
/
mid.jar
/
content
/
choose_dict.js
< prev
next >
Wrap
Text File
|
2009-09-16
|
17KB
|
544 lines
//
// choose_dict.js
//
var midmyprefs = Components.classes["@mozilla.org/preferences-service;1"].
getService(Components.interfaces.nsIPrefBranch);
var mylines = [];
dictionary = "default"
ExtraClicked = false;
const miduuidlen = 37;
midNS = "http://mid.mozdev.org/dictionaries";
allDictArray = [];
midmyDictionary = "";
function dc__initAll()
{
if (!window.arguments) {
document.documentElement.getButton('extriDict').collapsed = true;
document.documentElement.getButton('extra2').collapsed = true;
document.documentElement.getButton('disclosure').collapsed = true;
} else {
if (!window.arguments[0].dictionary ||
window.arguments[0].dictionary == "" ||
window.arguments[0].dictionary == "temporary" ||
window.arguments[0].dictionary == "new" ||
window.arguments[0].dictionary == "default") {
document.documentElement.getButton('extra2').collapsed = true;
}
dictionary = window.arguments[0].dictionary;
}
//alert (window.arguments[0].dictionary);
//alert (dictionary);
var type, alltypes, i, j, mytabpanels, newCheck, mytype;
var mytabs, newTab, newTabPanel;
var newDictionary = [], iDict = {};
var iType;
var midDtypeFirstTab = "";
var typesarray = [];
alltypes = " ";
for (i = 0; (iDict = document.getElementsByTagNameNS(midNS, "dict").item(i)); i++) {
type = iDict.getAttribute("type");
var marker = "";
if (iDict.getAttribute("special") == "yes") {
marker = "+";
}
type = marker + type;
if (typeof(allDictArray[type]) == "undefined") {
allDictArray[type] = [];
}
newDictionary = new dc__dictionaryObj(
iDict.getAttribute("dictid"), type, iDict.getAttribute("checked"), iDict.getAttribute("restrictions"), 0);
allDictArray[type][iDict.getAttribute("label")] = newDictionary;
if (alltypes.indexOf(type) == -1) {
alltypes = alltypes + type + " ";
typesarray.push(type);
}
}
typesarray.sort(
function(a, b) {
if ((b.charAt(0) == "+") && (a.charAt(0) == "+")) {
return a.toLocaleLowerCase().localeCompare(b.toLocaleLowerCase());
}
if (b.charAt(0) == "+") {
return -1;
}
if (a.charAt(0) == "+") {
return 1;
}
return a.toLocaleLowerCase().localeCompare(b.toLocaleLowerCase());
}
);
mytabs = document.getElementById("mid_dicttypetabs");
mytabpanels = document.getElementById("mid_dicttypetabpanels");
for (i = 0; i < typesarray.length; i++) {
mytype = typesarray[i];
var first = mytype.charAt(0).toUpperCase();
var tabid = "mid_choosdicttab" + first;
if (!document.getElementById(tabid)) {
newTab = document.createElement("tab");
newTab.setAttribute("label", " " + first + " ");
newTab.setAttribute("id", tabid);
newTabPanel = document.createElement("listbox");
newTabPanel.setAttribute("rows", "14");
//newTabPanel.setAttribute("orient", "vertical");
newTabPanel.setAttribute("id", "mid_choosedictpanel" + first);
newTabPanel.setAttribute("onkeydown", "dc__typeCheckBoxChangeKey(event);");
mytabs.appendChild(newTab);
mytabpanels.appendChild(newTabPanel);
} else {
newTabPanel = document.getElementById("mid_choosedictpanel" + first);
}
newCheck = document.createElement("listitem");
newCheck.setAttribute("type", "checkbox");
newCheck.setAttribute("id", "mid_choosedictcheck" + i);
newCheck.setAttribute("label", mytype.replace(/^\+/,""));
newCheck.setAttribute("value", mytype);
newCheck.setAttribute("crop", "none");
//newCheck.setAttribute("style", "margin-left: 10px !important;");
newCheck.setAttribute("onmousedown", "dc__typeCheckBoxChange(event);");
newTabPanel.appendChild(newCheck);
newCheck.setAttribute("checked", "false");
// newCheck.setAttribute("onfocus", "dt__onTypeCheckFocus(this);"); // new
if (window.arguments) {
// called from mid
if (dt__checkThisType(mytype)) {
newCheck.setAttribute("checked", "true");
}
}
else {
// from preferences not very much used
if (midmyprefs.getPrefType("extensions.mid.dtype." + mytype) == midmyprefs.PREF_BOOL) {
newCheck.setAttribute("checked", midmyprefs.getBoolPref("extensions.mid.dtype." + mytype.replace(/^\+/,"")));
} else {
for (j = 0; (iType = document.getElementsByTagNameNS(midNS, "default-dict-type").item(j)); j++) {
if (iType.getAttribute("label") == mytype.replace(/^\+/,"")) {
newCheck.setAttribute("checked", "true");
}
} // XML
}
}
if (newCheck.getAttribute("checked") == "true") {
document.getElementById(tabid).setAttribute("vanchecked","true");
dt__getDictionaries(mytype, "init");
if (midDtypeFirstTab == "") {
midDtypeFirstTab = tabid;
}
}
} // for
if (midDtypeFirstTab != "") {
var midmyListbox = document.getElementById("mid_selectdictionaries");
midmyListbox.scrollToIndex(0);
midmyListbox.selectItem(midmyListbox.getItemAtIndex(1));
mytabs.selectedItem = document.getElementById(midDtypeFirstTab);
}
else {
mytabs.selectedIndex = 0;
}
}
function dc__dictionaryObj(middictId, middictType, middictChecked,
middictRestrictions, middictIcon, midWeigth)
{
this.middictId = middictId;
this.middictType = middictType;
this.middictChecked = middictChecked;
this.middictRestrictions = middictRestrictions;
this.midWeigth = middictIcon;
this.midWeigth = midWeigth;
}
function dc__saveToCurrent()
{
dc__saveChanges();
window.close();
}
function dc__saveChanges()
{
var i, dt;
if (window.arguments) {
window.arguments[0].result = true;
dictionary = window.arguments[0].dictionary;
}
for (i = 0; (dt = document.getElementById("mid_dicttypetabbox").getElementsByTagName("listitem").item(i)); i++) {
if (dt.getAttribute("checked") == "true") {
if (dictionary == "default") {
midmyprefs.setBoolPref("extensions.mid.dtype." + dt.getAttribute("label"), true);
}
dt__savePreferences(dt.getAttribute("value"));
} else {
if (dictionary == "default") {
midmyprefs.setBoolPref("extensions.mid.dtype." + dt.getAttribute("label"), false);
}
}
}
if (dictionary != "default") {
window.arguments[0].mylines = mylines;
window.arguments[0].result = false;
}
}
function dc__typeCheckBoxChangeKey(e)
{
var key = e.which;
if (key == 32) {
dc__typeCheckBoxChange(e);
}
return true;
}
function dc__typeCheckBoxChange(event)
{
event.stopPropagation();
var i, midmypanel, midmylistitem, dt, vanchecked,
typeTab = document.getElementById("mid_dicttypetabbox").selectedTab;
if ('object' == typeof event) {
if (event.type == "mousedown" && (0 != event.button)) {
event.preventDefault();
return true;
} // right click?
} else {
return;
}
var mClickedNode = event.originalTarget;
if (mClickedNode.nodeName == "listbox") {
midmypanel = mClickedNode;
if (mClickedNode.selectedItem) {
midmylistitem = mClickedNode.currentItem;
}
else {
mClickedNode.selectItem(mClickedNode.getItemAtIndex(0));
midmylistitem = mClickedNode.currentItem;
}
} else {
if (mClickedNode.nodeName == "listitem") {
midmypanel = mClickedNode.parentNode;
midmylistitem = mClickedNode;
}
}
if ((midmypanel.nodeName != "listbox") || (midmylistitem.nodeName != "listitem")) {
event.preventDefault();
return;
}
vanchecked = false;
if (!(midmylistitem.getAttribute("checked") == "true")) {
dt__getDictionaries(midmylistitem.getAttribute("value"), "click");
vanchecked = true;
}
else {
dt__removeDictionariesFromList(midmylistitem.getAttribute("label"));
for (i = 0; (dt = midmypanel.getElementsByTagName("listitem").item(i));i++) {
if (!(dt == midmylistitem)) {
if (dt.getAttribute("checked") == "true") {
vanchecked = true;
}
}
}
}
typeTab.setAttribute("vanchecked", vanchecked);
}
function dt__getDictionaries(mytype, callerType)
{
var midmyListitem, midmyDictRestrictions, midmyDict, midmydDictionary, midmyId;
var realtype = mytype.replace(/^\+/, "");
var midmyListbox = document.getElementById("mid_selectdictionaries");
midmyListbox.setAttribute("onkeypress", "dt__onKeypressDictionaryList(this, event);");
var midmyListitemh = document.createElement('listitem');
var midmyheader = document.createElement('listcell');
midmyheader.setAttribute("label", realtype + " : ");
midmyheader.setAttribute("value", realtype);
var midmyplaceholder = document.createElement('listcell');
midmyListitemh.appendChild(midmyheader);
midmyListitemh.appendChild(midmyplaceholder);
midmyListitemh.setAttribute("disabled", true);
midmyListitemh.setAttribute("value", realtype);
midmyListbox.appendChild(midmyListitemh);
for (midmydDictionary in allDictArray[mytype]) {
midmyListitem = document.createElement('listitem');
midmyDictRestrictions = document.createElement('listcell');
midmyDict = document.createElement('listcell');
if (allDictArray[mytype][midmydDictionary].middictRestrictions == "") {
allDictArray[mytype][midmydDictionary].middictRestrictions = "-";
} else {
midmyDictRestrictions.setAttribute('style', "color : red; min-width: 12em !important;");
}
midmyDictRestrictions.setAttribute('label', allDictArray[mytype][midmydDictionary].middictRestrictions);
midmyDictRestrictions.setAttribute("crop", "none");
midmyDict.setAttribute('label', midmydDictionary);
midmyDict.setAttribute('value', mytype);
midmyListitem.setAttribute('value', realtype);
// midmyListitem.setAttribute("type", 'checkbox');
midmyDict.setAttribute("id", "mid_" + midmydDictionary);
midmyDict.setAttribute("type", "checkbox");
midmyDict.setAttribute("onclick", "dt__onselectDictionary(this);");
midmyDict.setAttribute("style", "white-space : nowrap !important; min-width:14em;");
// defaults from XUL.
if (allDictArray[mytype][midmydDictionary].middictChecked == "true") {
//alert("baj" + midmydDictionary);
midmyDict.setAttribute("checked", "true");
} else {
midmyDict.setAttribute("checked", "false");
}
midmyId = allDictArray[mytype][midmydDictionary].middictId;
if (midmyprefs.getPrefType("extensions.mid." + midmyId + "_checked") == midmyprefs.PREF_BOOL) {
if (midmyprefs.getBoolPref("extensions.mid." + midmyId + "_checked") == true) {
allDictArray[mytype][midmydDictionary].middictChecked = "true";
midmyDict.setAttribute("checked", "true");
} else {
midmyDict.setAttribute("checked", "false");
allDictArray[mytype][midmydDictionary].middictChecked = "false";
}
} // pref exists?
// from facts
if (window.opener && dt__checkThisType(mytype)) {
midmyDict.setAttribute("checked", "false");
allDictArray[mytype][midmydDictionary].middictChecked = "false";
if (window.opener.document.getElementById('tab' + midmyId)) {
allDictArray[mytype][midmydDictionary].middictChecked = "false";
if (!(window.opener.document.getElementById('tab' + midmyId).getAttribute("collapsed") == "true")) {
allDictArray[mytype][midmydDictionary].middictChecked = "true";
midmyDict.setAttribute("checked", "true");
}
}
}
midmyListitem.appendChild(midmyDict);
midmyListitem.appendChild(midmyDictRestrictions);
midmyListbox.appendChild(midmyListitem);
midmyListitem.setAttribute("allowevents", "true");
} // for
// midmyListbox.refresh; midmyListbox.ensureElementIsVisible(midmyListitemh);
if (callerType != "init") {
var x = midmyListbox.getIndexOfItem(midmyListitemh);
midmyListbox.ensureIndexIsVisible(x + 1);
midmyListbox.selectItem(midmyListbox.getItemAtIndex(x + 1));
}
}
function dt__checkThisType(mytype)
{
var ctab, retvalue = false;
for (var midmydDictionary in allDictArray[mytype]) {
ctab = window.opener.document.getElementById('tab' + allDictArray[mytype][midmydDictionary].middictId);
if (ctab) {
if (ctab.getAttribute("collapsed") != "true") {
retvalue = true;
}
}
}
return retvalue;
}
function dt__removeDictionariesFromList(mytype)
{
var i, li;
var midmyListbox = document.getElementById("mid_selectdictionaries");
midmyListbox.clearSelection();
var c = midmyListbox.getRowCount();
midmyListbox.scrollToIndex(0);
// midmyListbox.ensureIndexIsVisible(0); //?
for (i = c - 1; (i > - 1); i--) {
li = midmyListbox.getItemAtIndex(i);
if ((li.getAttribute("value") == mytype) || (li.getAttribute("value") == "+" + mytype)) {
while (li.hasChildNodes()) {
li.removeChild(li.lastChild);
}
midmyListbox.removeItemAt(midmyListbox.getIndexOfItem(li));
li = null;
}
}
}
function dt__onselectDictionary(c)
{
var m = c;
var midmyDictionary = m.getAttribute("label");
var midmytype = m.getAttribute("value");
var checked = m.getAttribute("checked");
if (checked == "true") {
allDictArray[midmytype][midmyDictionary].middictChecked = "false";
m.setAttribute("checked", "false");
}
else {
allDictArray[midmytype][midmyDictionary].middictChecked = "true";
m.setAttribute("checked", "true");
}
// m.refresh;
}
function dt__savePreferences(mytype)
{
var middictId, midmyDictionary, middictChecked = false;
for (midmyDictionary in allDictArray[mytype]) {
middictId = allDictArray[mytype][midmyDictionary].middictId;
if (allDictArray[mytype][midmyDictionary].middictChecked == "true") {
mylines.push(middictId);
middictChecked = true;
}
else {
middictChecked = false;
if (mylines.join().indexOf(middictId) > -1) {
mylines.splice((mylines.join().indexOf(middictId) / 37), 1);
}
}
if (dictionary == "default") {
midmyprefs.setBoolPref("extensions.mid." + middictId + "_checked", middictChecked);
}
}
return true;
}
function dt__onKeypressDictionaryList(lb, e)
{
var key = e.which;
if (key == 32) {
dt__onselectDictionary(lb.selectedItem.getElementsByTagName("listcell").item(0));
}
// event.preventDefault(); ??
// event.stopPropagation(); ??
return true;
}
function dt__firstSelTabFocus()
{
var mytabs = document.getElementById("mid_dicttypetabs");
mytabs.selectedItem.focus();
}
function dt__onTypeCheckFocus(tc)
{
var xpcomInterface = tc.parentNode.boxObject.QueryInterface(
Components.interfaces.nsIScrollBoxObject);
xpcomInterface.ensureElementIsVisible(tc);
}
// not used
function dt__getLocaleString(lsName)
{
var myprop =
Components.classes["@mozilla.org/intl/stringbundle;1"].
getService(Components.interfaces.nsIStringBundleService);
var mystrings = myprop.createBundle("chrome://mid/locale/choose_dict.properties");
return mystrings.GetStringFromName(lsName);
}
function dt__showDict()
{
var i, j;
for (i in allDictArray) {
// alert(i);
for (j in allDictArray[i]) {
dump(j.checked);
}
}
// alert(allDictArray["en_en"]["OneLook"]);
}
function dt__dictScroll() {
// alert("OK");
}